#include <cstdlib>
#include <iostream>
#include <vector>

using namespace std;

class Animal{
public:
	char *name;
public:
	// 构造函数
	Animal(char *name)
	{
		this->name = name;
	}
	// 拷贝构造函数
	Animal(const Animal *animal)
	{
		// 放入集合时候，需要进行深拷贝，因为放入集合的时候不是同一个对象，而是拷贝出来的对象会被进行析构
		this->name = (char *)malloc(sizeof(int)*24);
		cout << "Animal 拷贝构造函数" << endl;
	}
	// 析构函数
	~Animal()
	{
		cout << "Animal 析构函数" << endl;
		if(this->name){
			free(this->name);
			this->name = NULL;
		}
	}
};

int main()
{


	vector<Animal> vecAnimal;
	Animal animal((char *)"tom");
	/*
	 * 注意：
	 * 1.放入集合并不是同一个对象，而是对象的拷贝
	 * 2.析构函数会被多次调用，因此需要在拷贝构造函数中进行深拷贝
	 * */
	vecAnimal.push_back(animal);

	Animal coAnimal = vecAnimal.front();
	cout << "coAnimal.name: " << coAnimal.name << endl;

	return 0;
}

